import time


class P_Controller:
    def __init__(self, kp, setpoint):
        self.kp = kp
        self.setpoint = setpoint

    def update(self, measurement):
        offset = self.setpoint - measurement
        output = offset * self.kp

        if abs(output) > self.kp:
            if offset > 0.0:
                output = self.kp
            else:
                output = -self.kp

        return output


# 初始化PID P控制器
# pid = P_Controller(kp=2, setpoint=10.0)
pid = P_Controller(kp=5, setpoint=10.0)
# pid = P_Controller(kp=5, setpoint=10.5)

# 模拟温度控制
current_temp = 0
# 温差小于0.01度, 退出控制
while abs(current_temp - pid.setpoint) > 0.01:
    control_output = pid.update(current_temp)
    print(f"当前温度：{current_temp}°C, 控制输出：{control_output:.2f}")
    current_temp += control_output
    time.sleep(1)

print(f"当前温度：{current_temp}°C, 目标温度：{pid.setpoint}°C")

""" 测试1: 
pid = P_Controller(kp=2, setpoint=10.0)

前温度：0°C, 控制输出：2.00
当前温度：2°C, 控制输出：2.00
当前温度：4°C, 控制输出：2.00
当前温度：6°C, 控制输出：2.00
当前温度：8°C, 控制输出：2.00
当前温度：10°C, 目标温度：10.0°C
"""

""" 测试2: 
pid = P_Controller(kp=5, setpoint=10.0)

当前温度：0°C, 控制输出：5.00
当前温度：5°C, 控制输出：5.00
当前温度：10°C, 目标温度：10.0°C
"""
